iT邦幫忙

2026 iThome 鐵人賽

DAY 1
0

嗨,我是芥龍!很高興能與你見面!

關於這個主題

在幾個月前,閒閒沒事的我在網路上衝浪,並且找到了 Build Your Own X 這個 GitHub Repository。

我當時稍微嘗試了一下 Build Redis from Scratch,這對我而言是個很好的起點:我曾經用 PHP 或 Go 打造過許多基於 HTTP 的應用程式,這期間也用過許多 SQL/NoSQL 資料庫,但我並沒有從頭實作過一個基於 TCP 的應用程式。

What I can’t build, I don’t understand. ― Richard Feynman
我並不理解我不能建造的東西。--理查德.費曼

我認為這對我來說是個有趣的旅程,我希望你也可以樂在其中。

如何閱讀本系列文章

本系列文章基於我個人撰寫的教材 Olivine: A key-value storage supports RESP, written in Go,這是我為了練英文寫作才做的 Side Project。

在這個基礎上,鐵人賽的發文還會加入一些閒談跟小知識,還有一些我對架構上的思考(因為英文不夠好以致於沒辦法在那邊呈現出來……),不過兩邊的內容完全可以分開來看。

程式碼用法及習慣

程式碼的部份會在首行以註解的方式敘明檔案名稱為位置,例如:

// file: ./main.go -> 這表示位於專案根目錄的 main.go 這個檔案
package main

func main() {
}

對於一些較長的或不重要的內容,則會以 // ... 省略,以避免佔用過多版塊。

指令用法及習慣

對於指令內容會用程式碼區塊包裏,有 $ 前綴代表用戶自行輸入的內容,沒有前綴則表示預期會在 console 中輸出的內容:

$ echo "Hello World"
Hello World

有些時候會在不同的命令列中使用指令,$ 前綴代表相容於 POSIX 的命令列;(shell name) > 代表其它不同種類的命令列:

$ redis-cli
(redis) > PING
PONG

提示、註釋與警告

會使用 Quote 的方式撰寫註釋、提示或警告:

註:這是一個註釋

提示:這是一個簡單的提示

警告:這是一個警告

Q & A

這個專案將會「取代」Redis 嗎?

不,別作夢了。我做這個單純是出於興趣與學習。

我並不認為我可以完完全全比照 Redis 功能做出一個 Production Ready 的應用程式(說實話,光是實現一些小命令就讓我忙得焦頭爛額了),如果你需要一個相容於 Redis 並且可以用於線上服務的話,除了官方版也可以選擇 ValkeyGarnet

這系列文章將會使用 AI 嗎?

我個人會使用 AI 幫我總結與整理一些資訊(例如通訊協定、檔案結構等),並且生成一些比較繁瑣的程式碼或從中獲取一些靈感。

然而,我並不打算用 AI 直接生成整個專案或功能:我不認為這是一個良好的學習習慣,因為它跳過了最重要的「理解」步驟。

同時,我也不打算用 AI 直接產生文章:在 It's rude to show AI output to people 一文中,我認同不應該直接把 AI 產生的內容粗魯貼在任何人類臉上,且我個人仍然比較偏好於有溫度的文章(我也方便在文章裡講點垃圾話)。

畢竟,現在打開社群媒體處處充斥著 AI 文案與影音,也稍微是時候讓我們人類的閱讀與審美休息一下了。

這個專案的效能如何?

我並不會從一開始就過度關注效能,除非是為了講解一些原理或設計方案;我也會在一些文章中刻意留下效能問題,並且後續使用工程手段加以改善。

關於我

我是芥龍,在 2023 年中旬以前是一位 PHP/Laravel 開發者,在上一間公司服務時從頭開始學習 Go 語言並使用至今。不過 PHP 仍是世界上最好的語言,不接受反駁

我曾經在 2019 年第 11 屆鐵人賽分享 成為 Modern PHPer,這也是我第二次參與鐵人賽。

我擅長 Go 與 PHP,不過最近做的 Side Project 都是 Javascript……,或許等這個主題結束(或失敗?)後我再另外開一個系列講講 Side Project 吧。


系列文
從零開始打造 Redis:以 Go 建立 Production Ready 應用程式1
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言